home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1997-08-19 | 10.2 KB | 311 lines |
- Set Buffer 300
- TSL=6000
- Dim SONGS$(TSL),SELECT(TSL)
- Global SONGS$(),SELECT(),TSL,SONG,V$,OLD$,MOV,R,SPR,SOA,STS,SEL,NT,MNT
- MAIN
- '
- Procedure MAIN
- If Ntsc=0 Then NT=20 : MNT=250 Else NT=15 : MNT=210
- Unpack 6 To 6 : Screen Hide 6 : Auto View Off
- Screen Open 0,704,264,8,Hires
- For I=0 To 15 : Colour I,0 : Next
- Screen Display 0,120,,,
- Flash Off : Curs Off : Paper 0 : Cls 0 : Hide : Palette ,,,$F0F
- Set Rainbow 0,0,16,"","(1,1,9)(1,-1,10)",""
- For I=0 To 15 : Colour I,0 : Next
- Screen 0
- Screen Copy 6 To 0
- Auto View On : View
- Fade 3 To 6
- Locate 4,2 : Print "Loading songs..."
- If NT=20 Then Screen Copy 6,0,66,704,70 To 0,0,250
- If NT=15 Then Screen Copy 6,0,66,704,70 To 0,0,210
- Cls 0,560,30 To 670,45
- Screen Copy 6,590,30,620,45 To 0,560,30
- Auto View On
- FILE$="TSList"
- Open In 1,FILE$
- Set Input 10,-1
- Set Tab 8
- Pen 3
- SONG=1 : SEL=0 : OLD$="" : STS=0
- While Not Eof(1)
- Locate 21,2 : Print SONG;
- Line Input #1,SONGS$(SONG)
- Inc SONG
- Wend
- Close 1
- Pen 2 : Locate 4,2 : Print "Sorting Songs..." : Sort SONGS$(1)
- Locate 4,2 : Print "Songs :"; : Pen 3 : Print SONG-1;Space$(11)
- Pen 2
- Locate 30,2 : Print "Select :"
- Locate 61,2 : Print "Position :"
- OLDI=TSL-SONG+2 : OLDL=1 : R=1 : SPR=0 : SOA=33
- MENU:
- Pen 2 : Locate ,11 : Centre "Instuctions" : Print
- Centre "-------------" : Pen 3 : Print : Print
- Centre "Press F1 to display the full list" : Print : If NT=20 Then Print
- Centre "Then use cursor keys to move." : Print
- Centre "Up - Down: -1 +1 Left - Right: -20 +20" : Print : Print
- Centre "'s' to search" : Print
- Centre "'e' to edit " : Print
- Centre "'i' to insert" : Print
- Centre "'space' to select a song" : Print : Print
- Centre "F3 tongles search between Full / Songs only" : Print : If NT=20 Then Print
- If NT=20 Then Centre "In edit/insert F1-F2 tongles between USA/Greek keymaps"
- Locate ,NT+10 : Centre "(c) 1993-96 Alexis Katsadorakis <melody@compulink.gr>"
- Repeat
- Do : I$=Inkey$ : K=Scancode : Exit If K<>0 : Loop
- If K=80 Then Goto P_ALL
- If K=81 Then Goto PR_SONGS
- If K=82 Then SONG_OR_ALL
- If K=83 Then PR_ON_OFF
- If K=88 Then For I=1 To TSL : SELECT(I)=0 : Next : SEL=0 : Pen 3 : Locate 38,2 : Print SEL;" "
- If K=95 Then Show On : Read Text "TSL.doc" : Hide On
- Until K=69 or K=84
- If K=84
- Sort SONGS$(1)
- Pen 2 : Locate 4,2 : Print "Saving songs...";Space$(64) : Pen 3
- Open Out 1,FILE$
- For I=TSL-SONG+2 To TSL
- Locate 21,2 : Print Using "####";TSL-I
- Print #1,SONGS$(I);Chr$(10);
- Next
- End If
- Fade 3 : Wait 40
- Close
- End
- P_ALL:
- LA=1 : L=OLDL
- I=OLDI
- Cls 0,0,88 To 690,MNT
- Do : MA=0 : For I=I To I+NT
- Gosub CH2 : If K=69 Then Goto EX1
- If SELECT(L)=1 Then Pen 3 Else Pen 2
- Locate 2,10+LA : Print Using "####";L,SONGS$(I);
- Inc LA : Inc L
- If LA=NT+1 Then MA=NT+1 : MA2=NT : Gosub CH1 : LA=1 : Cls 0,0,88 To 690,MNT
- If K=69 Then Goto EX1
- Next
- Loop
- EX1:
- K=0
- If LA<>1 Then OLDL=L-LA+1 : OLDI=I-LA+1
- Locate 71,2 : Print Space$(12)
- If LA=1 Then OLDL=L-NT : OLDI=I-NT+1
- Rainbow 0,,0,0 : Goto MENU
- Return
- CH1: Rainbow 0,,116+(R*8),16 : Channel 1 To Rainbow 0
- I1: I$=Inkey$ : K=Scancode
- SO=R+L-MA
- If K=77 and R<LA-1 Then R=R+1 : Amal 1,"M 0,8,4" : Amal On 1 : Wait 4
- If K=76 and R>1 Then R=R-1 : Amal 1,"M 0,-8,4" : Amal On 1 : Wait 4
- If K=78 Then R=1 : Return
- If K=33 Then SEARCH[R] : Clear Key : K=0
- If K=79 and L>(NT*2) Then Add I,-(NT*2) : Add L,-(NT*2) : R=1 : Return
- If K=61 Then R=1 : Cls 0,0,88 To 690,MNT : Goto P_ALL
- If K=68 or K=64 Then Gosub SELECT : Pen 3 : Locate 38,2 : Print SEL;" "
- If K=89 Then STS=Abs(STS-1)
- If K=69 Then Return
- If K=18 Then Gosub SONG_EDIT
- If K=23 Then Gosub INSERT : Goto P_ALL
- If K=82 Then SONG_OR_ALL
- If K=83 Then PR_ON_OFF
- If K=95 Then Show On : Read Text "TSL.doc" : Hide On
- Locate 71,2 : Pen 3 : Print SO;" ";(100*SO)/SONG;"% ";
- Goto I1
- SELECT:
- If SELECT(SO)=0
- Pen 3 : Locate 2,10+R : Print Using "####";SO,SONGS$(I-MA2+R);
- Inc SEL : SELECT(SO)=1 : Return
- End If
- If SELECT(SO)=1
- Pen 2 : Locate 2,10+R : Print Using "####";SO,SONGS$(I-MA2+R);
- Add SEL,-1 : SELECT(SO)=0
- End If
- Return
- CH2: If I=TSL+1 Then MA=LA : MA2=LA : Gosub CH1 : Else Return
- If K=69 Then Cls 0,0,88 To 690,MNT : Return
- If I>TSL Then Goto CH2
- If I<TSL+1 Then I=I-LA+NT+1 : L=L-LA+NT+1 : Cls 0,0,88 To 690,MNT : LA=1 : Goto CH2
- '
- '
- PR_SONGS:
- Pen 3 : Locate ,9 : Centre "Enter = Screen - 'P' = Printer"
- Cls 0,0,88 To 690,MNT
- TAKE: I$=Inkey$ : If I$="p" or I$="P" Then Goto LPR_SONGS
- If I$<>Chr$(13) Then Goto TAKE
- Locate 1,9 : Print Space$(80)
- LA=1 : L=1 : P=0
- Pen 2
- For I=1 To SONG-1
- If SELECT(I)=1
- Locate 2,10+L : Print Using "####";LA,SONGS$(TSL-SONG+1+I) : P=1
- Inc LA : Inc L
- End If
- If L=NT+1 Then Wait Key : Cls 0,0,88 To 690,MNT : L=1
- Next
- If P=1 Then Wait Key : Cls 0,0,88 To 690,MNT
- Goto MENU
- '
- LPR_SONGS:
- Locate 1,9 : Print Space$(80)
- P=0 : LA=1 : L=1
- For I=1 To SONG-1
- If SELECT(I)=1
- Lprint Using "####";LA;" ";SONGS$(TSL-SONG+1+I) : P=1
- Inc LA : Inc L
- End If
- If L=60 Then Lprint Chr$(12) : L=1
- Next
- If P=1 Then Lprint Chr$(12)
- Goto MENU
- SONG_EDIT:
- V$=SONGS$(I-MA2+R)
- M_INPUT[8,10+R,77,V$,3]
- Locate 8,10+R : Pen 2 : Print V$;
- SONGS$(I-MA2+R)=V$
- Return
- '
- INSERT:
- Screen Open 1,690,23,8,Hires
- If NT=15 Then LL=178 Else LL=194
- Screen Display 1,120,LL,,
- Flash Off : Curs Off : Paper 0 : Cls 0 : Get Palette 0
- Repeat
- M_INPUT[8,1,77,"",3]
- If MOV<>27 Then Inc SONG : SONGS$(TSL-1-SONG+2)=V$
- Until MOV=27
- Screen Close 1
- Pen 2 : Locate 4,2 : Print "Sorting Songs..." : Sort SONGS$(1)
- Locate 4,2 : Print "Songs :"; : Pen 3 : Print SONG-1;Space$(10)
- Pen 2
- OLDI=TSL-SONG+2 : OLDL=1 : R=1 : SPR=0
- Cls 0,0,88 To 690,MNT
- Return
- End Proc
- '
- Procedure PR_ON_OFF
- If SPR=0 Then SPR=1 : LS=562 : ES=590 Else SPR=0 : LS=590 : ES=620
- Screen Copy 6,LS,30,ES,45 To 0,560,30
- End Proc
- '
- Procedure SONG_OR_ALL
- If SOA=33 Then SOA=1 : LS=630 : ES=668 : YY=30 Else SOA=33 : LS=188 : ES=230 : YY=53
- Screen Copy 6,LS,YY,ES,YY+13 To 0,188,53
- End Proc
- '
- Procedure SEARCH[R]
- Rainbow 0,,350,16
- Locate 18,9 : Print "Enter String : [";Space$(32);"]"
- V$=OLD$ : M_INPUT[35,9,30,V$,5]
- Locate 18,9 : Print Space$(50)
- If MOV=27 Then Goto EX2
- OLD$=V$
- V$=Upper$(V$)
- Screen Open 1,690,MNT+6,4,Hires
- Screen Display 1,,-242,,
- Set Tab 8
- Get Palette 0
- Flash Off : Curs Off : Paper 0 : Pen 2 : Cls 0
- P=0 : LA=1 : LLA=0 : T=0
- Pen 3
- A$=" Searching for ("+OLD$+") " : Locate 0,0 : Centre A$ : Pen 2
- LV=Len(V$)
- I=1
- If SPR=1 Then T=1 : Gosub SH_SC
- Repeat
- I$=Inkey$ : K=Scancode : If K=69 Then Screen Close 1 : Goto EX2
- V1$=Upper$(SONGS$(TSL-SONG+1+I))
- LV1=Len(V1$)
- For J=SOA To LV1-LV+1
- If V$=Mid$(V1$,J,LV) Then Gosub PR_V : Exit
- Next
- If LA=NT+11 and T=0 Then LA=1 : T=1 : Gosub SH_SC : Gosub WKEY : Cls 0,0,8 To 690,MNT-2
- If LA=NT+11 and T=1 Then LA=1 : Gosub WKEY : Cls 0,0,8 To 690,MNT-2
- Inc I
- Until I=SONG
- If P=1 Then A$=" End of search - Press any key - "+Str$(LLA)+" songs " Else Goto EX1
- Locate 0,NT+11 : Pen 3 : Centre A$
- If T=0 Then Gosub SC1
- Wait Key
- EX3:
- For I=42 To -242 Step -10 : Screen Display 1,,I,, : Wait Vbl : Next
- Screen Close 1
- If STS=1 Then Pen 3 : Locate 38,2 : Print SEL;" "
- If SPR=1 Then Lprint Chr$(12)
- EX1:
- If P=0 Then Screen Close 1 : Locate ,9 : Pen 5 : Centre "String not found" : Wait 100 : Locate 0,9 : Print Space$(80)
- EX2: Rainbow 0,,116+(R*8),16 : Pop Proc
- PR_V:
- If SPR=1
- Lprint SONGS$(TSL-SONG+1+I)
- End If
- Locate 0,LA : Print Using "######";I,SONGS$(TSL-SONG+1+I);
- If STS=1 Then SELECT(I)=1 : Inc SEL
- P=1 : Inc LA : Inc LLA
- Return
- '
- SH_SC:
- Locate 0,NT+11 : Pen 3 : Centre " Press any key " : Pen 2
- SC1: For E=-242 To 42 Step 10 : Screen Display 1,,E,, : Wait Vbl : Next E
- Screen Display 1,,42,,
- Return
- '
- WKEY:
- If SPR=1 Then Return
- I$=Inkey$ : K=Scancode : If I$="" Then Goto WKEY
- If K=69 Then Goto EX3 Else Return
- End Proc
- '
- Procedure M_INPUT[N,M,MX,V$,P]
- T=N-1 : N1=N : N=N+Len(V$) : V$=V$+Space$(MX+1-Len(V$)) : MOV=0
- Pen P : Paper 0 : Locate N1,M : Print V$;
- GRFLASH:
- Pen P
- NCHAR:
- Locate N,M : Paper 4+GR : Print Mid$(V$,N-N1+1,1); : Paper 0
- Repeat
- I$=Inkey$ : K=Scancode
- Until I$<>""
- If K=82 Then SONG_OR_ALL
- If K=83 Then PR_ON_OFF
- If K=89 Then STS=Abs(STS-1)
- If K=79 and N>N1 Then Paper 0 : Locate N,M : Print Mid$(V$,N-N1+1,1); : N=N-1
- If K=78 and N<N1+MX Then Paper 0 : Locate N,M : Print Mid$(V$,N-N1+1,1); : Inc N
- If K=81 Then GR=1 : Goto GRFLASH Else If K=80 Then GR=0 : Goto GRFLASH
- I=Asc(I$) : If K=68 and N>T Then Goto GO Else If K=69 Then Goto ESC
- Locate N-1,M : If K=65 and N>N1 Then Print " ";Mid$(V$,N-N1+1,1); : N=N-1 : Mid$(V$,N-N1+1,1)=" " : Goto NCHAR
- If I<32 Then Goto NCHAR
- If GR=1 Then Gosub GR_CONVERT
- Locate N,M : Print I$; : Mid$(V$,N-N1+1,1)=I$ : If N<N1+MX Then Inc N
- Right$(V$,1)=" "
- Goto NCHAR
- 'This is a converter to Greeks
- 'Greek keyboard has many extra chars, located in 192 and up
- GR_CONVERT:
- Data 192,193,214,195,196,212,194,198,200,205,201,202,203,204,206
- Data 207,81,208,209,210,199,215,87,213,211,197
- Data 216,218,249,220,221,247,219,224,227,235,231,232,233,234,236
- Data 238,113,239,240,242,226,250,241,248,243,223
- If I=59 or I=58 Then Gosub ME_TONO
- Restore GR_CONVERT
- For C=65 To 90 : Read A : If I=C Then I=A : I$=Chr$(I) : Goto EX1 Else Next
- For C=97 To 122 : Read A : If I=C Then I=A : I$=Chr$(I) : Goto EX1 Else Next
- EX1:
- Return
- ME_TONO:
- Data 97,217,101,222,104,225,105,228,111,237,118,251,121,244
- C$=Input$(1) : C=Asc(C$)
- If I=58 and C=105 Then I=229 : I$=Chr$(I) : Return
- If I=58 and C=121 Then I=245 : I$=Chr$(I) : Return
- Restore ME_TONO : For I=1 To 7 : Read A,B : If A=C Then I=B : I$=Chr$(I)
- Next : If I$=";" Then I=C : I$=C$ : Return
- Goto EX1
- ESC: MOV=27
- GO:
- Locate N,M : Paper 0 : Print Mid$(V$,N-N1+1,1);
- For I=MX To 1 Step -1 : If Mid$(V$,I,1)<>" " Then Exit
- Next
- V$=Left$(V$,I)
- End Proc